import router from './router'
import {ElMessage} from 'element-plus'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {
  getApplication,
  getToken,
  getUserId,
  removeApplication,
  removeToken,
  removeUserId,
  getH5Token,
  getH5UserId,
  getH5Application,
  removeH5Token,
  removeH5UserId,
  removeH5Application
} from '@/config/cookie'
import {isHttp} from '@/utils/validate'
import {isRelogin} from '@/utils/request'
import useUserStore from '@/store/modules/user'
import useSettingsStore from '@/store/modules/settings'
import usePermissionStore from '@/store/modules/permission'
import settings from "@/settings";

NProgress.configure({ showSpinner: false });

const whiteList = ['/login', '/register', '/401', '/403', '/404','/h5_login'];

router.beforeEach( (to, from, next) => {
  NProgress.start()
  document.title = settings.title

  if (getToken() && getUserId() && getApplication()) {
    if(to.path.includes('h5_')) {
      //  登录了PC，进入移动端
      if(getH5Token() && getH5UserId() && getH5Application()) {
        if (to.path === '/h5_login') {
          next({ path: '/h5_home' })
          // useUserStore().getH5Info().then((info) => {
            
          // })
          // NProgress.done()
        } else {
          next()
          // useUserStore().getH5Info().then((info) => {
           
          // })
        }
      } else {
        if (to.path === '/h5_login') {
          next()
        } else {
          next({ path: '/h5_login' })
        }
      }
    } else {
       // PC端

       console.log('to.path',)

      if(to.path === '/index') {
        sessionStorage.removeItem('menuItem')
      }

      to.meta['title'] && useSettingsStore().setTitle(to.meta.title)
      if (to.path === '/login') {
        next({ path: '/' })
        NProgress.done()
      } else {
        if (useUserStore().roles.length === 0) {
          isRelogin.show = true
          // 判断当前用户是否已拉取完user_info信息
          useUserStore().getInfo().then((info) => {
            if (info.needModify !== '0' && to.path !== '/passwd') {
              next(`/passwd?redirect=${to.fullPath}`)
              NProgress.done()
            } else {
              isRelogin.show = false
              usePermissionStore().generateRoutes().then(accessRoutes => {
                console.debug("accessRoutes", accessRoutes)
                // 根据roles权限生成可访问的路由表
                accessRoutes.forEach(route => {
                  if (!isHttp(route.path)) {
                    router.addRoute(route) // 动态添加可访问路由表
                  }
                })
                next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
              })
            }
          }).catch(err => {
            useUserStore().logout().then(() => {
              next({ path: '/' })
            })
          })
        } else {
          next()
        }
      }
    }
  } else if(getH5Token() && getH5UserId() && getH5Application()) {
    // 移动端
    console.log('to.path',to.path)
    if (to.path === '/h5_login') {
      console.log('111111111')
      next({ path: '/h5_home' })
      NProgress.done()
    } else {
      if(to.path.includes('h5_')) {
        next()
      } else {
        // 移动端进入PC，没有登录进登录页
        if (to.path === '/login') {
          next()
        } else {
          next(`/login?redirect=${to.fullPath}`)
        }
      }
      NProgress.done()
    }
  } else {
    console.log('2222222222')
    // 没有token
    if (whiteList.indexOf(to.path) !== -1) {
      // 在免登录白名单，直接进入
      next()
    } else {
      removeToken()
      removeUserId()
      removeApplication()
      removeH5Token()
      removeH5UserId()
      removeH5Application()
      if(to.path.includes('h5_')) {
        // 移动端进移动端登录
        next({ path: '/h5_login' })
      } else {
        // PC端进PC端登录
        next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
      }
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done()
})
